import { ElMessage, ElLoading } from 'element-plus'
import router from '../router'
import { ERCode__ } from './constant'
import { unref } from 'vue'
/**
 * 时间戳转换器
 * @param {string | number} time 时间戳
 * @param {string} fmt 转换格式
 * @returns {string}
 */
function timeFormat(time, fmt = 'yy-MM-dd hh:mm') {
  const D = new Date(Number(time))
  const Exp = {
    // 月份
    'M+': D.getMonth() + 1,
    // 日
    'd+': D.getDate(),
    // 小时
    'h+': D.getHours(),
    // 分
    'm+': D.getMinutes(),
    // 秒
    's+': D.getSeconds(),
    // 季度
    'q+': Math.floor((D.getMonth() + 3) / 3),
    // 毫秒
    S: D.getMilliseconds(),
  }
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, D.getFullYear() + '')
  for (let part in Exp)
    if (new RegExp(`(${part})`).test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1
          ? Exp[part]
          : ('00' + Exp[part]).substr(('' + Exp[part]).length)
      )
    }
  return fmt
}

/**
 * 返回指定范围的一个随机数
 * @param {number} min 最小值
 * @param {number} max 最大值
 * @param {number} fixed 小数点位数
 * @returns {number} 一个随机数
 */
function createRandomNum(min, max, fixed = 0) {
  return min > max
    ? Number(0).toFixed(fixed)
    : Math.round(Math.random() * (max - min)).toFixed(fixed)
}

/**
 * 返回路由参数
 * @returns {import('vue-router').RouteLocationNormalizedLoaded} 路由参数
 */
function getRouter() {
  return unref(router.currentRoute)
}

/**
 * 错误处理
 * @param {number} code 状态码
 * @param {string} msg 错误信息
 */
function handleError({ code = 9999, msg }, redirect = 'dashborad') {
  const reLogin = [4003]
  // ElMessage.closeAll()
  if (reLogin.includes(code)) {
    ElMessage.error({
      message: msg || ERCode__[code],
    })
    return router.push({ name: 'login', params: { redirect } })
  } else
    ElMessage.error({
      message: msg || ERCode__[code],
    })
}

export { timeFormat, createRandomNum, handleError, getRouter }
